import axios from 'axios'
import { Toast } from 'vant'
import router from '@/router/index.js'

import store from '@/store/index.js'
import { removeLocal, getLocal } from '@/utils/local.js'

const _fetch = axios.create({
  baseURL: process.env.VUE_APP_URL
})
// 请求拦截器
_fetch.interceptors.request.use(
  config => {
    // 请求拦截器 config中有请求相关信息 如果他里面有needToken 为空
    // 那么说明需要token  那么在请求头上设置

    if (config.needToken) {
      config.headers.authorization = `Bearer ${getLocal('token')}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)
// 响应拦截器
_fetch.interceptors.response.use(
  res => {
    // return res
    if (res.data.code === 200) {
      return res
    } else if (res.data.code === 401 || res.data.code === 403) {
      // 此时也没必要保存token啦 删掉就行啦
      removeLocal('token')
      // 返回登入页面

      router.push('/login')
      // 将登入状态改成false
      store.commit('setLoginState', false)
      Toast.fail(res.data.message)
      // 标准写法前面加一个new Error
      // 这样的话保证调用then方法里面一定是请求到了的成功的 因此没请求到 直接下面代码让直行catch方法啦
      return Promise.reject(new Error(res.data.message))
    } else {
      // 报出错误提示
      Toast.fail(res.data.message)
      return Promise.reject(new Error(res.data.message))
    }
  },
  error => {
    // 这里不加new Error是因为内部处理啦
    return Promise.reject(error)
  }
)
export default _fetch
